package com.ylbh.modules.comment.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ylbh.common.pojo.activity.dto.ActivityGoodsDTO;
import com.ylbh.common.pojo.comment.dto.EvaluateClassDTO;
import com.ylbh.common.pojo.comment.dto.EvaluateClassListDTO;
import com.ylbh.common.pojo.comment.dto.ShoppingCommentReplyDTO;
import com.ylbh.common.pojo.comment.dto.ShoppingGoodsCommentDTO;
import com.ylbh.common.pojo.comment.vo.CommentReplyListVO;
import com.ylbh.common.pojo.comment.vo.CommentReplyPersonalVO;
import com.ylbh.common.pojo.comment.vo.EvaluateClassListVO;
import com.ylbh.common.pojo.comment.vo.TimingCommentVO;
import com.ylbh.common.pojo.goods.vo.ShoppingGoodsCommentVO;
import com.ylbh.common.utils.PageDTO;
import com.ylbh.common.utils.PageUtils;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/**
 * 商品评论
 *
 * @author mgh
 * @date 2019-04-22 15:25:57
 */
@Mapper
@Repository
public interface CommentMapper extends BaseMapper<ShoppingGoodsCommentDTO> {

    /**
     * 商城评论列表
     * @param pageDTO
     * @param page
     * @return
     */
    List<ShoppingGoodsCommentDTO> selectCommentList(@Param(value = "pageDTO") EvaluateClassListDTO pageDTO, Page<Integer> page);

    /**
     * 评论审核
     * @param id
     * @param statusType
     */
    void updateAuditStatusById(List<Long> id, Integer statusType);

    /**
     * 删除评论
     * @param ids
     */
    void deleteCommentById(@Param(value = "ids") List<Long> ids);

    /**
     * 评论回复列表
     * @param commentId
     * @return
     */
    CommentReplyListVO selectCommentReplyListById(String commentId);

    /**
     * 查出对应所有回复评论的人
     * @param commentId
     * @return
     */
    List<CommentReplyPersonalVO> selectCommentReplyPersonalById(String commentId);

    /**
     * 追问回复
     * @param dto
     */
    void insertCommentReplyPersonal(@Param(value = "dto") ShoppingCommentReplyDTO dto);

    /**
     * 直接针对评论人回复
     * @param dto
     */
    void insertCommentReply(@Param(value = "dto") ShoppingCommentReplyDTO dto);

    /**
     * 上级的名称
     * @param id
     * @return
     */
    CommentReplyPersonalVO selectReplyById(String id);

    /**
     * 评价标签列表
     * @param dto
     * @param page
     * @return
     */
    List<EvaluateClassListVO> selectEvaluateClassList(@Param(value = "dto") EvaluateClassListDTO dto, Page<Integer> page);

    /**
     * 获取标签详情
     * @param evaluateId
     * @return
     */
    EvaluateClassListVO selectEvaluateClassDetailsById(@Param(value = "evaluateId") Integer evaluateId);

    /**
     * 修改评价标签
     * @param dto
     */
    void updateEvaluateClassById(@Param(value = "dto") EvaluateClassDTO dto);

    /**
     * 新增评价标签
     * @param dto
     */
    void insertEvaluateClass(@Param(value = "dto") EvaluateClassDTO dto);

    /**
     * 删除评价标签
     * @param ids
     */
    void deleteEvaluateClassById(@Param(value = "ids") Integer ids);

    /**
     * 回复审核
     * @param ids
     * @param statusType
     */
    void updateAuditReplyById(List<Long> ids, Integer statusType);

    /**
     * 将评论添加到定时评论表
     * @param content
     * @param goodsId
     * @param userId
     * @param date
     */
    void insertTimingComment(String content, Integer goodsId, Long userId, Date date);

    /**
     * 查询出要执行的评论信息
     * @return
     */
    List<TimingCommentVO> selectTimingComment();

    /**
     * 根据Id修改为已执行
     * @param id
     */
    void updateTimingCommentStatueById(Integer id, Date date);

    /**
     * 查询这条评论是否已经添加过
     * @param realName
     * @param content
     * @param goodsId
     * @return
     */
    int selectIsAddByGoodsId(String realName, String content, Integer goodsId);

    /**
     * 查看对应商品评论
     * @param id
     * @param page
     * @return
     */
    List<ShoppingGoodsCommentVO> selectGoodsCommentById(String id, Page<Integer> page);

    /**
     * 删除商品评论
     * @param ids
     */
    void updateGoodsCommentByIds(@Param(value = "ids") List<String> ids);
    /**
     * 查看对应商品评论
     * @param goodsCollectionId
     * @return
     */
    List<ShoppingGoodsCommentVO> selectCommentsById(@Param(value = "id") String goodsCollectionId);

    void insertComment(@Param(value = "vo") ShoppingGoodsCommentVO vo, @Param(value = "goodsId") Integer goodsId);
}
